home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / dev / gg / ncurses-5.3.lha / ncurses-5.3 / include / tic.h < prev    next >
C/C++ Source or Header  |  2002-10-24  |  11KB  |  304 lines

  1. /****************************************************************************
  2.  * Copyright (c) 1998-2000,2001 Free Software Foundation, Inc.              *
  3.  *                                                                          *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a  *
  5.  * copy of this software and associated documentation files (the            *
  6.  * "Software"), to deal in the Software without restriction, including      *
  7.  * without limitation the rights to use, copy, modify, merge, publish,      *
  8.  * distribute, distribute with modifications, sublicense, and/or sell       *
  9.  * copies of the Software, and to permit persons to whom the Software is    *
  10.  * furnished to do so, subject to the following conditions:                 *
  11.  *                                                                          *
  12.  * The above copyright notice and this permission notice shall be included  *
  13.  * in all copies or substantial portions of the Software.                   *
  14.  *                                                                          *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  16.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  17.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  18.  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  19.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  20.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  21.  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  22.  *                                                                          *
  23.  * Except as contained in this notice, the name(s) of the above copyright   *
  24.  * holders shall not be used in advertising or otherwise to promote the     *
  25.  * sale, use or other dealings in this Software without prior written       *
  26.  * authorization.                                                           *
  27.  ****************************************************************************/
  28.  
  29. /****************************************************************************
  30.  *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
  31.  *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
  32.  ****************************************************************************/
  33.  
  34. /*
  35.  * $Id: tic.h,v 1.42 2002/10/12 15:46:15 tom Exp $
  36.  *    tic.h - Global variables and structures for the terminfo
  37.  *            compiler.
  38.  */
  39.  
  40. #ifndef __TIC_H
  41. #define __TIC_H
  42.  
  43. #ifdef __cplusplus
  44. extern "C" {
  45. #endif
  46.  
  47. #include <curses.h>    /* for the _tracef() prototype, ERR/OK, bool defs */
  48.  
  49. /*
  50. ** The format of compiled terminfo files is as follows:
  51. **
  52. **        Header (12 bytes), containing information given below
  53. **        Names Section, containing the names of the terminal
  54. **        Boolean Section, containing the values of all of the
  55. **                boolean capabilities
  56. **                A null byte may be inserted here to make
  57. **                sure that the Number Section begins on an
  58. **                even word boundary.
  59. **        Number Section, containing the values of all of the numeric
  60. **                capabilities, each as a short integer
  61. **        String Section, containing short integer offsets into the
  62. **                String Table, one per string capability
  63. **        String Table, containing the actual characters of the string
  64. **                capabilities.
  65. **
  66. **    NOTE that all short integers in the file are stored using VAX/PDP-style
  67. **    byte-order, i.e., least-significant byte first.
  68. **
  69. **    There is no structure definition here because it would only confuse
  70. **    matters.  Terminfo format is a raw byte layout, not a structure
  71. **    dump.  If you happen to be on a little-endian machine with 16-bit
  72. **    shorts that requires no padding between short members in a struct,
  73. **    then there is a natural C structure that captures the header, but
  74. **    not very helpfully.
  75. */
  76.  
  77. #define MAGIC        0432    /* first two bytes of a compiled entry */
  78.  
  79. /*
  80.  * The "maximum" here is misleading; XSI guarantees minimum values, which a
  81.  * given implementation may exceed.
  82.  */
  83. #define MAX_NAME_SIZE    512    /* maximum legal name field size (XSI:127) */
  84. #define MAX_ENTRY_SIZE    4096    /* maximum legal entry size */
  85.  
  86. /* The maximum size of individual name or alias is guaranteed in XSI to
  87.  * be 14, since that corresponds to the older filename lengths.  Newer
  88.  * systems allow longer aliases, though not many terminal descriptions
  89.  * are written to use them.
  90.  */
  91. #if HAVE_LONG_FILE_NAMES
  92. #define MAX_ALIAS    32    /* POSIX minimum for PATH_MAX */
  93. #else
  94. #define MAX_ALIAS    14    /* SVr3 filename length */
  95. #endif
  96.  
  97. /* location of user's personal info directory */
  98. #define PRIVATE_INFO    "%s/.terminfo"    /* plug getenv("HOME") into %s */
  99.  
  100. /*
  101.  * Some traces are designed to be used via tic's verbose option (and similar in
  102.  * infocmp and toe) rather than the 'trace()' function.  So we use the bits
  103.  * above the normal trace() parameter as a debug-level.
  104.  */
  105.  
  106. #define MAX_DEBUG_LEVEL 15
  107. #define DEBUG_LEVEL(n)    ((n) << TRACE_SHIFT)
  108.  
  109. #define set_trace_level(n) \
  110.      _nc_tracing &= DEBUG_LEVEL(MAX_DEBUG_LEVEL), \
  111.     _nc_tracing |= DEBUG_LEVEL(n)
  112.  
  113. #ifdef TRACE
  114. #define DEBUG(n, a)    if (_nc_tracing >= DEBUG_LEVEL(n)) _tracef a
  115. #else
  116. #define DEBUG(n, a)    /*nothing*/
  117. #endif
  118.  
  119. extern NCURSES_EXPORT_VAR(unsigned) _nc_tracing;
  120. extern NCURSES_EXPORT(void) _nc_tracef (char *, ...) GCC_PRINTFLIKE(1,2);
  121. extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *);
  122. extern NCURSES_EXPORT(const char *) _nc_visbuf2 (int, const char *);
  123.  
  124. /*
  125.  * These are the types of tokens returned by the scanner.  The first
  126.  * three are also used in the hash table of capability names.  The scanner
  127.  * returns one of these values after loading the specifics into the global
  128.  * structure curr_token.
  129.  */
  130.  
  131. #define BOOLEAN 0        /* Boolean capability */
  132. #define NUMBER 1        /* Numeric capability */
  133. #define STRING 2        /* String-valued capability */
  134. #define CANCEL 3        /* Capability to be cancelled in following tc's */
  135. #define NAMES  4        /* The names for a terminal type */
  136. #define UNDEF  5        /* Undefined */
  137.  
  138. #define NO_PUSHBACK    -1    /* used in pushtype to indicate no pushback */
  139.  
  140.     /*
  141.      *    The global structure in which the specific parts of a
  142.      *    scanned token are returned.
  143.      *
  144.      */
  145.  
  146. struct token
  147. {
  148.     char    *tk_name;        /* name of capability */
  149.     int    tk_valnumber;    /* value of capability (if a number) */
  150.     char    *tk_valstring;    /* value of capability (if a string) */
  151. };
  152.  
  153. extern NCURSES_EXPORT_VAR(struct token)    _nc_curr_token;
  154.  
  155.     /*
  156.      * List of keynames with their corresponding code.
  157.      */
  158. struct kn {
  159.     const char *name;
  160.     int code;
  161. };
  162.  
  163. extern NCURSES_EXPORT_VAR(const struct kn) _nc_key_names[];
  164.  
  165.     /*
  166.      * Offsets to string capabilities, with the corresponding functionkey
  167.      * codes.
  168.      */
  169. struct tinfo_fkeys {
  170.     unsigned offset;
  171.     chtype code;
  172.     };
  173.  
  174. #if    BROKEN_LINKER
  175.  
  176. #define    _nc_tinfo_fkeys    _nc_tinfo_fkeysf()
  177. extern NCURSES_EXPORT(struct tinfo_fkeys *) _nc_tinfo_fkeysf (void);
  178.  
  179. #else
  180.  
  181. extern NCURSES_EXPORT_VAR(struct tinfo_fkeys) _nc_tinfo_fkeys[];
  182.  
  183. #endif
  184.  
  185.     /*
  186.      * The file comp_captab.c contains an array of these structures, one
  187.      * per possible capability.  These are indexed by a hash table array of
  188.      * pointers to the same structures for use by the parser.
  189.      */
  190.  
  191. struct name_table_entry
  192. {
  193.     const char *nte_name;    /* name to hash on */
  194.     int    nte_type;    /* BOOLEAN, NUMBER or STRING */
  195.     short    nte_index;    /* index of associated variable in its array */
  196.     short    nte_link;    /* index in table of next hash, or -1 */
  197. };
  198.  
  199. struct alias
  200. {
  201.     const char    *from;
  202.     const char    *to;
  203.     const char    *source;
  204. };
  205.  
  206. extern NCURSES_EXPORT_VAR(int) _nc_tparm_err;
  207.  
  208. extern NCURSES_EXPORT_VAR(const struct name_table_entry * const) _nc_info_hash_table[];
  209. extern NCURSES_EXPORT_VAR(const struct name_table_entry * const) _nc_cap_hash_table[];
  210.  
  211. extern NCURSES_EXPORT_VAR(const struct alias) _nc_capalias_table[];
  212. extern NCURSES_EXPORT_VAR(const struct alias) _nc_infoalias_table[];
  213.  
  214. extern NCURSES_EXPORT(const struct name_table_entry *) _nc_get_table (bool);
  215. extern NCURSES_EXPORT(const struct name_table_entry * const *) _nc_get_hash_table (bool);
  216.  
  217. #define NOTFOUND    ((struct name_table_entry *) 0)
  218.  
  219. /* out-of-band values for representing absent capabilities */
  220. #define ABSENT_BOOLEAN        (-1)        /* 255 */
  221. #define ABSENT_NUMERIC        (-1)
  222. #define ABSENT_STRING        (char *)0
  223.  
  224. /* out-of-band values for representing cancels */
  225. #define CANCELLED_BOOLEAN    (char)(-2)    /* 254 */
  226. #define CANCELLED_NUMERIC    (-2)
  227. #define CANCELLED_STRING    (char *)(-1)
  228.  
  229. #define VALID_BOOLEAN(s) ((unsigned char)(s) <= 1) /* reject "-1" */
  230. #define VALID_NUMERIC(s) ((s) >= 0)
  231. #define VALID_STRING(s) ((s) != CANCELLED_STRING && (s) != ABSENT_STRING)
  232.  
  233. /* termcap entries longer than this may break old binaries */
  234. #define MAX_TERMCAP_LENGTH    1023
  235.  
  236. /* this is a documented limitation of terminfo */
  237. #define MAX_TERMINFO_LENGTH    4096
  238.  
  239. #ifndef TERMINFO
  240. #define TERMINFO "/usr/share/terminfo"
  241. #endif
  242.  
  243. /* access.c */
  244. extern NCURSES_EXPORT(char *) _nc_basename (char *);
  245. extern NCURSES_EXPORT(char *) _nc_rootname (char *);
  246.  
  247. /* comp_hash.c: name lookup */
  248. extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_entry
  249.     (const char *, const struct name_table_entry *const *);
  250. extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_type_entry
  251.     (const char *, int, const struct name_table_entry *);
  252.  
  253. /* comp_scan.c: lexical analysis */
  254. extern NCURSES_EXPORT(int)  _nc_get_token (bool);
  255. extern NCURSES_EXPORT(void) _nc_panic_mode (char);
  256. extern NCURSES_EXPORT(void) _nc_push_token (int);
  257. extern NCURSES_EXPORT(void) _nc_reset_input (FILE *, char *);
  258. extern NCURSES_EXPORT_VAR(int) _nc_curr_col;
  259. extern NCURSES_EXPORT_VAR(int) _nc_curr_line;
  260. extern NCURSES_EXPORT_VAR(int) _nc_syntax;
  261. extern NCURSES_EXPORT_VAR(long) _nc_comment_end;
  262. extern NCURSES_EXPORT_VAR(long) _nc_comment_start;
  263. extern NCURSES_EXPORT_VAR(long) _nc_curr_file_pos;
  264. extern NCURSES_EXPORT_VAR(long) _nc_start_line;
  265. #define SYN_TERMINFO    0
  266. #define SYN_TERMCAP    1
  267.  
  268. /* comp_error.c: warning & abort messages */
  269. extern NCURSES_EXPORT(void) _nc_set_source (const char *const name);
  270. extern NCURSES_EXPORT(void) _nc_get_type (char *name);
  271. extern NCURSES_EXPORT(void) _nc_set_type (const char *const name);
  272. extern NCURSES_EXPORT(void) _nc_syserr_abort (const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
  273. extern NCURSES_EXPORT(void) _nc_err_abort (const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
  274. extern NCURSES_EXPORT(void) _nc_warning (const char *const,...) GCC_PRINTFLIKE(1,2);
  275. extern NCURSES_EXPORT_VAR(bool) _nc_suppress_warnings;
  276.  
  277. /* comp_expand.c: expand string into readable form */
  278. extern NCURSES_EXPORT(char *) _nc_tic_expand (const char *, bool, int);
  279.  
  280. /* comp_scan.c: decode string from readable form */
  281. extern NCURSES_EXPORT(char) _nc_trans_string (char *, char *);
  282.  
  283. /* captoinfo.c: capability conversion */
  284. extern NCURSES_EXPORT(char *) _nc_captoinfo (const char *, const char *, int const);
  285. extern NCURSES_EXPORT(char *) _nc_infotocap (const char *, const char *, int const);
  286.  
  287. /* lib_tputs.c */
  288. extern NCURSES_EXPORT_VAR(int) _nc_nulls_sent;        /* Add one for every null sent */
  289.  
  290. /* comp_main.c: compiler main */
  291. extern const char * _nc_progname;
  292.  
  293. /* read_entry.c */
  294. extern NCURSES_EXPORT(const char *) _nc_tic_dir (const char *);
  295.  
  296. /* write_entry.c */
  297. extern NCURSES_EXPORT(int) _nc_tic_written (void);
  298.  
  299. #ifdef __cplusplus
  300. }
  301. #endif
  302.  
  303. #endif /* __TIC_H */
  304.